/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.consultorio.dao;

import br.com.consultorio.bean.Endereco;
import br.com.consultorio.util.FabricaConexao;
import br.com.consultorio.bean.Pessoa;
import java.sql.*;
import java.util.List;

/**
 *
 * @author L3nfers
 */
public class PessoaDaoImp implements PessoaDao {

    Connection conn;
    PreparedStatement ps;
    ResultSet rs;
    Pessoa pessoa;

    @Override
    public List pesquisaPorNome(String nome) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Object salvar(Object obj) throws Exception {
        pessoa = (Pessoa) obj;
        EnderecoDao enderecoDao = new EnderecoDaoImp();
        UsuarioDao usuDao = new UsuarioDaoImp();
        try {
            conn = FabricaConexao.abreConexao();
            enderecoDao.salvaEndereco(pessoa);
            String SQL = "INSERT INTO pessoa(nome, cpf, telefone, email, endereco_id, dataNasc) VALUES(?,?,?,?,?,?)";
            ps = conn.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
            ps.setString(1, pessoa.getNome());
            ps.setString(2, pessoa.getCpf());
            ps.setString(3, pessoa.getTelefone());
            ps.setString(4, pessoa.getEmail());   
            ps.setInt(5, pessoa.getEndereco().getId());
            ps.setDate(6, new java.sql.Date(pessoa.getDataNasc().getTime()));
            ps.executeUpdate();
            rs = ps.getGeneratedKeys();
            rs.next();
            pessoa.setId(rs.getInt(1));
            usuDao.salvaUsuario(pessoa);
            
        } catch (Exception e) {
            throw new Exception("Pessoa - Erro ao SALVAR " + e.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps);
        }

        return pessoa;
    }

    @Override
    public void alterar(Object obj) throws Exception {
        Pessoa pessoa = (Pessoa) obj;
        EnderecoDao endeDao = new EnderecoDaoImp();
        UsuarioDao usuDao = new UsuarioDaoImp();

        try {
            String SQL = "UPDATE pessoa SET nome=?, cpf=?, telefone=?, email=?, dataNasc=? WHERE id=?";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(SQL);
            ps.setString(1, pessoa.getNome());
            ps.setString(2, pessoa.getCpf());
            ps.setString(3, pessoa.getTelefone());
            ps.setString(4, pessoa.getEmail());
            ps.setDate(5, new java.sql.Date(pessoa.getDataNasc().getTime()));
            ps.setInt(6, pessoa.getId());
            ps.executeUpdate();
            endeDao.alteraEndereco(pessoa);
            usuDao.alteraUsuario(pessoa);
        } catch (Exception e) {
            throw new Exception("Pessoa - Erro ao ALTERAR "
                    + e.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps);
        }
    }

    @Override
    public void excluir(int id) throws Exception {
        Connection conn = null;
        PreparedStatement ps = null;

        try {
            String SQL = "DELETE FROM pessoa WHERE id = ?";
            conn = FabricaConexao.abreConexao();
            ps = conn.prepareStatement(SQL);

            ps.setInt(1, id);
            ps.executeUpdate();
        } catch (Exception e) {
            throw new Exception("Pessoa - Erro ao EXCLUIR "
                    + e.getMessage());
        } finally {
            FabricaConexao.fechaConexao(conn, ps);
        }
    }

    @Override
    public Object procurar(Integer id) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<Object> listar() throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Pessoa retornaPessoa(int id) throws Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
